import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

print("------------------------------求和------------------------------")
# 求和
n = np.arange(10)
print(np.sum(n))

n = np.random.randint(0,10,size=(3,5))
print(n)
# 所有数的和
print(np.sum(n))
# 加到一列
print(np.sum(n,axis=0))
# 加到一列
print(np.sum(n,axis=1))

print("------------------------------求各种值------------------------------")
# 最大值
print(np.max(n))
# 最小值
print(np.min(n))
# 平均值
print(np.average(n))
# 中位数
print(np.median(n))

n = n.reshape(-1)
print(n)
# 第一个遇到的最大值下标
print(np.argmax(n))
# 第一个遇到的最小值下标
print(np.argmin(n))
# 找到所有最大值的下表
print(np.argwhere(n == np.max(n)))
# 次方
print(np.power(n,3))
# 标准差
print(np.std(n))
# 方差
print(np.var(n))

print("------------------------------矩阵操作------------------------------")
n = np.random.randint(0,10,size=(3,5))
print(n)
# 加法
print(n+10)
# 减法
print(n-10)
# 乘法
print(n*10)
# 除法
print(n/10)
# 整除
print(n//10)
# 取余
print(n%10)

# 矩阵相加
n1 = np.random.randint(0,10,size=(4,4))
n2 = np.random.randint(0,10,size=(4,4))
print(n1 + n2)

# 矩阵积
print(np.dot(n1, n2))

# 矩阵逆
n = np.array([[1,2,3],[4,5,6],[4,5,8]])
print(n)
print(np.linalg.inv(n))
# 矩阵的行列式
print(np.linalg.det(n))
# 矩阵的秩
print(np.linalg.matrix_rank(n))

print("------------------------------广播机制------------------------------")
m = np.ones((2,3), dtype=np.int8)
a = np.arange(3)
print(m)
print(a)
print(m + a)

a = np.ones((4,1),dtype=np.int8)
print(a)
b = np.arange(4)
print(b)
print(a + b)

print("------------------------------常见的数学操作------------------------------")
n = np.array([1,4,-8,9,16,25,64])
# 取绝对值
print(np.abs(n))
# 开平凡根
print(np.sqrt(n))
# 求平方
print(np.square(n))
# 以e为底求求指数
print(np.exp(n))
# 以e为底求求对数
print(np.log(n))
print(np.log(np.e))
print(np.log(1))
print(np.log2(n)) # 以2为底的对数

print("------------------------------数组排序------------------------------")
n1 = np.random.randint(0,10,size=6)
print(n1)
# 不改变老数组
n2 = np.sort(n1)
print(n2)
n3 = np.random.randint(0,10,size=6)
print(n3)
# 直接在老数组上面改
print(n3.sort())

print("------------------------------文件的保存------------------------------")
x = np.arange(5)
y = np.arange(10,20)
# 将x数组保存到x.npy文件中
np.save('x.npy',x)
# 读取x.npy文件
print(np.load('x.npy'))

# 同时存储多个数组
np.savez('arr.npz',xrr=x,yrr=y)
# 读取x
print(np.load('arr.npz')['xrr'])

# 存储到csv或者txt,delimiter设置分隔符
np.savetxt('arr.txt',x,delimiter=',')
print(np.loadtxt('arr.txt'))
print(np.loadtxt('arr.txt', delimiter=',',dtype=np.int16))

